package com.example.service;

import android.app.AlertDialog.Builder;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.ServerSocket;
import java.net.Socket;

import org.json.JSONException;
import org.json.JSONObject;

import com.example.juyixia.Myinfo;

import android.app.Dialog;
import android.app.Service;
import android.content.Intent;
import android.os.Handler;
import android.os.IBinder;
import android.os.Message;
import android.view.WindowManager;
import android.widget.Toast;

public class MessService extends Service {
	private boolean isRun;// 线程是否继续的标志
	private Handler handler1; // 显示当前时间线程消息处理器。
	public static final String bm="utf-8"; 
	private static JSONObject activeInfo;
	private Myinfo myinfo=(Myinfo) getApplication();
	@Override
	public IBinder onBind(Intent intent) {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public int onStartCommand(Intent intent, int flags, int startId) {
		isRun = true;
		new Thread(new Runnable() {
			@Override
			// 在Runnable中，如果要让线程自己一直跑下去，必须自己定义while结构
			// 如果这个run()方法读完了，则整个线程自然死亡
			public void run() {
				// 定义一个线程中止标志
				
					try {
					
						ServerSocket serverSocket = new ServerSocket(54321);  
						while(isRun){
							Socket client = serverSocket.accept(); 
							 BufferedReader in = new BufferedReader(new InputStreamReader(client.getInputStream(),bm));
							 String str = in.readLine(); 
							 activeInfo=new JSONObject(str);
							 
							 Message msg = new Message(); // 在安卓中，不要在线程中直接现实方法，这样app容易崩溃，有什么要搞，扔到消息处理器中实现。
							handler1.sendMessage(msg);
							 
						}
					} catch (IOException e) {
						// TODO Auto-generated catch block
						e.printStackTrace();
					} catch (JSONException e) {
						// TODO Auto-generated catch block
						e.printStackTrace();
					}
					
					
				
			}
		}).start();// 默认线程不启动，必须自己start()
		// 不停在接受线程的消息，根据消息的参数，进行处理 ，这里没有传递过来的参数
		handler1 = new Handler(new Handler.Callback() {// 这样写，就不弹出什么泄漏的警告了
			@Override
			public boolean handleMessage(Message msg) {
				Builder builder = new Builder(getApplicationContext());
				try {
					builder.setTitle("活动名："+activeInfo.getString("活动名：")+";"+"发起人："+activeInfo.getString("发起人："));
					builder.setMessage("计划参与者："+activeInfo.getString("参与者："));				
					builder.setNeutralButton("不参与", null);
					builder.setNegativeButton("参与", null);
				} catch (JSONException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
				
				Dialog dialog = builder.create();
				dialog.getWindow().setType(WindowManager.LayoutParams.TYPE_SYSTEM_ALERT);
				dialog.show();

				return false;
			}
		});
		return START_STICKY;// 这个返回值其实并没有什么卵用，除此以外还有START_NOT_STICKY与START_REDELIVER_INTENT
	}

	@Override
	public void onDestroy() {
		// TODO Auto-generated method stub
		isRun=false;
	}
}
